package com.elm.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.elm.model.Food;
import com.elm.model.Seller;
import com.elm.service.FoodService;
import com.elm.serviceimpl.FoodServiceImpl;

public class UpdateFoodController extends HttpServlet{
	FoodService foodservice=new FoodServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	// TODO Auto-generated method stub
	doPost(req, resp);
}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
	req.setCharacterEncoding("utf8");
	resp.setCharacterEncoding("utf8");
	 PrintWriter  pw =  resp.getWriter();
		HttpSession session=req.getSession();
		Seller seller=(Seller) session.getAttribute("currentSeller");
		int sellerid=seller.getSellerid();
		
		
		 String foodname ="";//名称
		   String foodprice ="";//价格
		   String foodgenre = "";//种类
		  String foodimg ="";
		  String foodid1="";
			String savePath ="C:\\img";
			
			File file = new File(savePath);
			//判断上传文件的保存目录是否存在
			if (!file.exists() && !file.isDirectory()) {
			
			//创建目录
			file.mkdir();
			}
			//消息提示
			String message = "";
		
			try{
			//使用Apache文件上传组件处理文件上传步骤：
			//1、创建一个DiskFileItemFactory工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//2、创建一个文件上传解析器
			ServletFileUpload upload = new ServletFileUpload(factory);
			//解决上传文件名的中文乱码
			upload.setHeaderEncoding("UTF-8"); 
			//3、判断提交上来的数据是否是上传表单的数据
			if(!ServletFileUpload.isMultipartContent(req)){
			//按照传统方式获取数据
			return;
			}
			//4、使用ServletFileUpload解析器解析上传数据，解析结果返回的是一个List<FileItem>集合，每一个FileItem对应一个Form表单的输入项
			List<FileItem> list = upload.parseRequest(req);
			for(FileItem item : list){
			//如果fileitem中封装的是普通输入项的数据
			if(item.isFormField()){
				 String name =item.getFieldName(); //获取form表单中name的id
	                if("foodname".equals(name))  
	                	foodname=item.getString("utf-8");
	                //item是指定id的value值，此处用       item.getString("utf-8")是把item用utf-8解析，根据你的需要可以用其他的，如：gbk；
	                else if("foodprice".equals(name))
	                	foodprice=item.getString("utf-8");
	                else if("foodgenre".equals(name))
	                	foodimg=item.getString("utf-8");  
	                else if("foodid".equals(name))
	                	foodid1=item.getString("utf-8");  
			}else{//如果fileitem中封装的是上传文件
			//得到上传的文件名称，
			String filename = item.getName();
			
			if(filename==null || filename.trim().equals("")){
			continue;
			}
			//注意：不同的浏览器提交的文件名是不一样的，有些浏览器提交上来的文件名是带有路径的，如： c:\a\b\1.txt，而有些只是单纯的文件名，如：1.txt
			//处理获取到的上传文件的文件名的路径部分，只保留文件名部分
			filename = filename.substring(filename.lastIndexOf("\\")+1);
			//获取item中的上传文件的输入流
			InputStream in = item.getInputStream();
			//创建一个文件输出流
			FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
			//创建一个缓冲区
			byte buffer[] = new byte[1024];
			//判断输入流中的数据是否已经读完的标识
			int len = 0;
			//循环将输入流读入到缓冲区当中，(len=in.read(buffer))>0就表示in里面还有数据
			while((len=in.read(buffer))>0){
			//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
			out.write(buffer, 0, len);
			}
			foodgenre =  "\\" + filename;
			//关闭输入流
			in.close();
			//关闭输出流
			out.close();
			//删除处理文件上传时生成的临时文件
			item.delete();
			message = "文件上传成功！";
			}
			}
			}catch (Exception e) {
			message= "文件上传失败！";
			e.printStackTrace();			 
			}
			int foodid = Integer.parseInt(foodid1);
			
		Food food =new Food(foodname, foodid, foodprice, foodgenre,foodimg);
		int flag=foodservice.updateFood(food);
		pw.write(String.valueOf(flag));
	}
}
